package com.yanu.trace.t2s.controller;


import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yanu.trace.t2s.entity.Enterprise;
import com.yanu.trace.t2s.entity.Pig;
import com.yanu.trace.t2s.entity.Pork;
import com.yanu.trace.t2s.service.EnterpriseService;
import com.yanu.trace.t2s.service.PigService;
import com.yanu.trace.t2s.service.PorkService;
import com.yanu.trace.t2s.util.Message;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * <p>
 *  前端控制器
 * </p>
 *
 * @author whj
 * @since 2021-06-23
 */
@RestController
@RequestMapping("/pork")
public class PorkController {
    @Autowired
    PorkService porkService;
    @Autowired
    PigService pigService;
    @Autowired
    EnterpriseService enterpriseService;

    /**
     * 查询一个企业的全部猪肉信息
     * @param info
     * @return
     */
    @PostMapping("/listbyeid")
    public Message listbyeid(@RequestBody String  info) {
        Message msg=new Message();
        JSONObject jsonObject=JSONObject.parseObject(info);//实例化json对象
        Integer eid=jsonObject.getInteger("eid");//获取eid
        System.out.println("企业id："+eid);
        Enterprise enterprise = enterpriseService.getById(eid);//根据eid查询获取一个企业实体
        IPage<Pork> iPage=new Page<>();
        if(enterprise.getType()!=0)
        {
             iPage = porkService.selectPageByeid(new Page<>(jsonObject.getLong("current"),
                    jsonObject.getLong("size")),eid,enterprise.getType()-1);//根据企业类型来查询猪肉信息并分页返回
        }
        else {
            iPage = porkService.selectPage(new Page<>(jsonObject.getLong("current"),
                    jsonObject.getLong("size")));//超级管理员查看所有
        }
        if (iPage!=null)
        {
            msg.setSuccess(iPage);
        }
        else
            msg.setFail(409);
        return msg;
    }

    /**
     * 获取市场可以购买的猪肉列表
     * @param info
     * @return
     */
    @PostMapping("/buylist")
    public Message buylist(@RequestBody String  info) {
        Message msg=new Message();
        JSONObject jsonObject=JSONObject.parseObject(info);//实例化json对象
        Integer eid=jsonObject.getInteger("eid");//获取eid
        System.out.println(eid);
        Enterprise enterprise = enterpriseService.getById(eid);//获取企业实体
        IPage<Pork> iPage = porkService.selectPageBylevel(new Page<>(jsonObject.getLong("current"),
                jsonObject.getLong("size")),enterprise.getType()-1);//根据企业类型查询可以购买的猪肉 并且分页返回
        if (iPage!=null)
        {
            msg.setSuccess(iPage);
        }
        else
            msg.setFail(409);
        return msg;
    }

    /**
     * 获取一块猪肉的切割信息  返回一个pork list
     * @param info
     * @return
     */
    @PostMapping("/getcutinfo")
    public Message getcutinfo(@RequestBody String info)
    {
        Message msg=new Message();
        JSONObject jsonObject=JSONObject.parseObject(info);//实例化json对象
        Integer eid=jsonObject.getInteger("eid");
        Integer porkid = jsonObject.getInteger("porkid");

        Enterprise enterprise = enterpriseService.getById(eid);//获取企业实体
        System.out.println("当前的查看的企业类型:"+enterprise.getType());

        QueryWrapper<Pork> wrapper = new QueryWrapper();
        wrapper.eq("parent",porkid).eq("level",enterprise.getType()); //根据企业类型进行查询这块肉被这个企业分割的情况

        List<Pork> list = porkService.list(wrapper);
        msg.setSuccess(list);
        return msg;

    }

    /**
     * 删除一块猪肉 可以批量删除
     * @param info
     * @return
     */
    @PostMapping("/deletepork")
    public Message deletepork(@RequestBody String info)
    {
        Message msg=new Message();
        JSONObject jsonObject=JSONObject.parseObject(info);//实例化json对象
        JSONArray array=jsonObject.getJSONArray("deletearray");//传入删除的猪肉id数组
        List<Integer>list = new ArrayList<>();
        for(Object jstr:array){
            list.add((Integer) jstr);
        }
        if(porkService.removeByIds(list))
            msg.setSuccess(null);
        else
            msg.setFail(411);

        return msg;
    }

    /**
     * 更新一块猪肉的信息 这里可以用来更新购买状态
     * @param info
     * @return
     */
    @PostMapping("/updatebyid")
    public Message updatebyid(@RequestBody String info)
    {
        Message msg=new Message();
        Pork pork = JSON.parseObject(info, Pork.class);//实例化json对象
        UpdateWrapper<Pork> wrapper = new UpdateWrapper<>();
        wrapper.eq("id", pork.getId());
        if(porkService.update(pork,wrapper))
            msg.setSuccess(null);
        else
            msg.setFail(420);

        return msg;
    }

    /**
     * 切割一块猪肉 将切割后的pork list加入到pork表中
     * @param s
     * @return
     */
    @PostMapping("/cutpork")
    public Message cutpork(@RequestBody String s)
    {
        Message msg=new Message();
        JSONObject jsonObject=JSONObject.parseObject(s);
        JSONArray array = jsonObject.getJSONArray("array");
        Integer eid=jsonObject.getInteger("eid");
        Enterprise enterprise = enterpriseService.getById(eid);//根据企业id查询获取企业实体
        System.out.println("当前的切肉的企业类型:"+enterprise.getType());
        Integer level=enterprise.getType();  //level 和type有对应关系

        List<Pork>porks = new ArrayList<>();//存储pork
        for (int i = 0; i < array.size(); i++) {
            Pork pork = JSON.parseObject(String.valueOf(array.getJSONObject(i)), Pork.class);
            pork.setLevel(level);
            if(level==1)//如果是屠宰企业切割猪到猪肉 则需要更新这个猪的切割状态
            {
                UpdateWrapper<Pig> updateWrapper = new UpdateWrapper<>();
                updateWrapper.eq("id",pork.getParent()).set("cut_state", 1);
                pigService.update(updateWrapper);
            }
            porks.add(pork);
        }

        if (porkService.saveOrUpdateBatch(porks))
        {
            msg.setSuccess(null);
        }
        else msg.setFail(411);

        return msg;
    }

}

